# 定义类装饰器
class Check(object):
    def __init__(self, fn):  # fn = comment
        self.__fn = fn

    def __call__(self, *args, **kwargs):
        print("登陆")
        self.__fn()  # comment()


# 被装饰的函数
@Check  # comment = Check(comment)
def comment():
    print("发表评论")


comment()  # Check 类的实例在调用__call__方法
"""
类装饰器：
@Check 等价于 comment = Check(comment), 所以需要提供⼀个init⽅法，并多增加⼀个fn参数。
要想类的实例对象能够像函数⼀样调⽤，需要在类⾥⾯使⽤call⽅法，把类的实例变成可调⽤对象(callable)，也就是说可以像调⽤函数⼀样进⾏调⽤。
在call⽅法⾥进⾏对fn函数的装饰，可以添加额外的功能。

小结：
想要让类的实例对象能够像函数⼀样进⾏调⽤，需要在类⾥⾯使⽤call⽅法，把类的实例变成可调⽤对象(callable)
类装饰器装饰函数功能在call⽅法⾥⾯进⾏添加
"""
